4.1.0 找出一个数组中出现次数最多是元素
1.先找出一个数组中各个元素出现的次数
(1).利用 hash 键值对存储
function most(arr) {
let obj = {};
for(let i=0;i<arr.length;i++){
let k = arr[i];
if(obj[k]){
obj[k]++;
}else{
obj[k] = 1;
}
}
// 再比较obj中键值最大的
......
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14
(3).借助数组Array的reduce方法
function most(arr) {
let max;
let maxNum = 1;
let newObj = arr.reduce(function(cal,value) {
cal[value]? cal[value]++ : cal[value]=1;
if(cal[value]>max) {
max = value
max++;
}
return cal;
},{})
return newObj;
}
or
function most(arr) {
let max;
let maxNum = 1;
let newObj = arr.reduce(function(cal,value) {
if (value in cal) {
cal[value]++;
}else {
cal[value] = 1;
}
return cal;
},{})
return newObj;
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
(4).利用ES6语法以及逗号运算符进行的代码优化,这个方法看起来代码量很少,但是理解起来却需要花费一定的功夫
- 逗号运算符
let a = (1,2,3);
a
// 3
1
2
3
2
3
- demo:
function most(arr) {
let obj = arr.reduce((cal,v)=>(
cal[v]++ || (cal[v] = 1),
(cal.max = cal.max >= cal[v]? cal.max:cal[v]),
(cal.key = cal.max > cal[v]? cal.key: v),
cal
),
{})
return obj;
}
most([2,5,6,7,5,8,7])
// {2: 1, 5: 2, 6: 1, 7: 2, 8: 1, max: 2, key: 7}
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
2.找出一个数组中数值元素最大值
1.es6拓展运算符...
Math.max(...arr)
2.es5 apply(与方法1原理相同)
Math.max.apply(null,arr)
or
Math.max.call(null,...[1,5,6,9])
3.for循环
let max = arr[0];
for (let i = 0; i < arr.length - 1; i++) {
max = max < arr[i+1] ? arr[i+1] : max
}
4.数组sort()
arr.sort((a, b) => {
return b - a
})
arr[0]
5.数组reduce
arr.reduce((a, b) => {
return a > b ? a : b}
)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29